var row =
	{ 
		init : function()
			{
				Ext.apply(Ext.form.VTypes,
					{
					    numericText: "Este campo deve conter somente numeros.",
					    numericMask: /[0-9]/,
					    numericRe: /(^\d+$)/,
					    numeric: function(v)
							{
						        return this.numericRe.test(v);
						    }
					});  
								
				this.idioma = new Ext.form.ComboBox
		            ({
		                fieldLabel: 'Idioma',
		                name: 'data[Texto][idioma_id]',
		                allowBlank: false,
		                width: 350,
		                height: 100,
		                
		                hiddenName: 'data[Texto][idioma_id]',
		                editable: false,
		                valueField: 'id',
		                displayField: 'nome',
		                mode: 'local',
		                triggerAction: 'all',
		                lastQuery: '',
		                store: new Ext.data.SimpleStore(
				           	{
				           		fields: ['id', 'nome'],
				           		data: _PHP_.form.idiomas
				           	})
		            });
					
				this.categoria = new Ext.form.ComboBox
		            ({
		                fieldLabel: 'Categoria',
		                name: 'data[Texto][categoria_id]',
		                allowBlank: false,
		                width: 350,
		                height: 100,
		                
		                hiddenName: 'data[Texto][categoria_id]',
		                editable: false,
		                valueField: 'id',
		                displayField: 'nome',
		                mode: 'local',
		                triggerAction: 'all',
		                lastQuery: '',
		                store: new Ext.data.SimpleStore(
				           	{
				           		fields: ['id', 'nome'],
				           		data: _PHP_.form.categorias
				           	})
		            });
		            
		        this.ano = new Ext.form.TextField
		            ({
		                fieldLabel: 'Ano',
		                name: 'data[Texto][ano]',
						maxLength: 4,
		                width: 350,
						vtype: 'numeric'
		            });
				
				this.titulo = new Ext.form.TextField
		            ({
		                fieldLabel: 'titulo',
		                name: 'data[Texto][titulo]',
		                allowBlank: false,
		                width: 350
		            });
		            
		        this.autor = new Ext.form.TextField
		            ({
		                fieldLabel: 'Autor',
		                name: 'data[Texto][autor]',
		                allowBlank: false,
		                width: 350
		            });
		        
		        this.tema = new Ext.form.TextField
		            ({
		                fieldLabel: 'Tema',
		                name: 'data[Texto][tema]',
		                allowBlank: false,
		                width: 350
		            });
					
				this.referencia = util.createComplementoField
		        	(
		        		{
			        		id: 'referencia',
			        		title:
			        			{
			        				text: 'Referencia'
			        			},
			        		allowBlank:
			        			{
			        				text: true
			        			},
			        		basename:
			        			{
			        				field: '[Referencia][0][referencia]'
			        			},
			        	 	width: 350
		        	 	}
		        	 );
					
				this.url = new Ext.form.TextField
		            ({
		                fieldLabel: 'URL',
		                name: 'data[Texto][url]',
		                width: 350,
						vtype: 'url'
		            });
				
		        this.arquivo = util.createComplementoField
		        	(
		        		{
			        		id: 'arquivo',
			        		title:
			        			{
			        				text: 'Resumo',
			        				file: 'Arquivo'
			        			},
			        		allowBlank:
			        			{
			        				text: true
			        			},
			        		basename:
			        			{
			        				field: '[Arquivo][0][arquivo]',
			        				file: 'Arquivo_0_arquivo'
			        			},
							onchange:
								{
									text: function()
										{
											if(row.arquivo.text.getValue().length < 1 && row.arquivo.file.url.get !== null)
											{
												row.arquivo.text.markInvalid('O arquivo só sera gravado caso possua um resumo');
											}
											else
											{
												row.arquivo.text.clearInvalid();
											}
										},
									file: function()
										{
											if(row.arquivo.file.getValue().length > 0)
											{
												row.arquivo.file.url.get = true;
											}
											else
											{
												row.arquivo.file.url.get = null;
											}
											row.arquivo.text.fireEvent('change');
										}
								},
			        	 	width: 350
		        	 	}
		        	 );
				
				this.store = new Ext.data.Store
					({
					    url: _PHP_.form.tag.url,
				        reader: new Ext.data.JsonReader
							(
								{
					        		totalProperty: 'total',
									root: 'rows',
					            	id: 'id'
					         	},
							 	[
					            	'id',
									'nome'
					         	]
							)
				    });
				
				this.tags = new Ext.ux.BoxSelect
					({
						fieldLabel: 'Tags',
					    name: 'data[Tag][Tag][]',
						queryParam: 'tag',
					    mode: 'remote',
					    displayField: 'nome',
						valueField: 'nome',
						store: row.store,
						minChars: 1,
					    _maxLength: 999999,
						width: 350
					});
						        
		        this.fieldset1 = new Ext.form.FieldSet(
			        {
			        	title: 'Informações',
			        	height: 'auto',
		                defaultType: 'textfield',
			        	items: 
			        		[this.idioma,
							 this.categoria,
							 this.ano,
			        		 this.titulo,
			        		 this.autor,
			        		 this.tema,
							 this.referencia.id,
							 this.referencia.tipo_id,
							 this.referencia.text,
							 this.url,
							 this.tags]
			        });
					
			    this.fieldset2 = new Ext.form.FieldSet(
			        {
			        	title: 'Anexo',
			        	height: 'auto',
		                defaultType: 'textfield',
		                collapsible: true,
		                collapsed: _PHP_.form.hasntArquivo,
			        	items: 
			        		[this.arquivo.id,
			        		 this.arquivo.tipo_id,
			        		 this.arquivo.text,
			        		 this.arquivo.file]
			        });
				
				util.applyDefaults(this.referencia.text, formX.defaults);
				util.applyDefaults(this.arquivo.text, formX.defaults);
				this.fieldset1.items.each(function()
					{
						util.applyDefaults(this, formX.defaults);
					});
				this.fieldset2.items.each(function()
					{
						util.applyDefaults(this, formX.defaults);
					});
				formX.add(this.fieldset1, this.fieldset2);
					
				if(_PHP_.action != 'admin_add')
				{
					this.observacao = util.createComplementoField
			        	({
				        		id: 'observacao',
				        		title:
				        			{
				        				text: 'Texto',
				        				file: 'Anexo'
				        			},
				        		allowBlank:
				        			{
				        				text: false
				        			},
				        		basename:
				        			{
				        				field: '[Texto][0][observacao]',
				        				file: 'Texto_0_observacao'
				        			},
				        	 	width: 350
			        	 });
				
					this.fieldset3 = new Ext.form.FieldSet
						({
				        	title: 'Adiconar observação',
							baseCls: 'x-panel',
				        	height: 'auto',
							bodyStyle: 'padding: 5px',
			                defaultType: 'textfield',
							labelWidth: 70,
							hidden: true,
				        	items: 
				        		[
									this.observacao.id,
					         	 	this.observacao.text,
							  	 	this.observacao.file
								],
							buttonAlign: 'center',
							buttons:
								[
									formX.buttons[0].cloneConfig({text: 'Salvar'})
								]
				        });
					this.fieldset3.items.each(function()
						{
							Ext.apply(this, formX.defaults);
						});
					
					this.observacoes = util.createFrame
						({
							id: 'observacoes',
							title: 'Observações',
							collapsed: _PHP_.form.hasntObservacao,
							height: 400,
							url:
								{
									list: _PHP_.observacao.url.list,
									add: _PHP_.observacao.url.add
								},
							callback:
								{
									list: function()
							        	{
											var panel = row.observacoes.getPanel();
											row.fieldset3.hide();
											panel.show();
											panel.getUpdater().update(panel.loadParams);
											row.observacoes.setHeight(400);
							        	},
									add: function()
							        	{
											formX.on('beforeaction', row.observacoes.beforeaction);
											formX.on('actioncomplete', row.observacoes.actioncomplete);
											
											row.fieldset3.setTitle('Adicionar observação');
											row.observacao.clean();
											row.observacao.file.toggleCtrl(false);
																						
											row.fieldset3.show();
											row.observacoes.getPanel().hide();
											row.observacoes.setHeight(270);
							        	}
								}
						});
						
					this.observacoes._edit = function(url, id)
						{
							row.observacoes.editRow
								({
									elId: '#observacao_'+id,
									url: url+id,
									callback: function(params)
										{
											row.fieldset3.setTitle('Editar observação');
											row.observacao.clean();
											
											row.observacao.file.toggleCtrl(params.file);
											row.observacao.file.url.get = row.observacao.file.url.bkp.get+id;
											row.observacao.file.url.del = row.observacao.file.url.bkp.del+id;
											row.observacao.id.setValue(id);
											row.observacao.text.setValue(params.text);
										}
								});
						};
					
					this.observacoes._del = function(url, id)
						{
							row.observacoes.delRow
								({
									url: url+id,
									callback: function()
										{
											Ext.get('observacao_'+id).remove();
										}
								});
						};
					
					util.applyDefaults(this.observacao.text, formX.defaults);
					this.observacoes.add(this.fieldset3);
					formX.add(this.observacoes);
					
					this.observacoes.success = function()
						{
							formX.un('success', row.observacoes.success);
							return false;
						};
					this.observacoes.beforeaction = function()
						{
							formX.un('beforeaction', row.observacoes.beforeaction);
							row.ctrlFields(row.observacoes.fields, true);
							formX.buttons[0].setDisabled(true);
							formX.buttons[1].setDisabled(true);
							
							formX.on('success', row.observacoes.success);
							formX.doSubmit(_PHP_.observacao.url.add);
						};
					this.observacoes.actioncomplete = function(form, action)
						{
							formX.un('actioncomplete', row.observacoes.actioncomplete);
							row.ctrlFields(row.observacoes.fields, false);
							formX.buttons[0].setDisabled(false);
							formX.buttons[1].setDisabled(false);
							row.observacoes.callback.list();
						};
					this.observacoes.fields = 
						[
							this.idioma,
							this.categoria,
							this.ano,
				    		this.titulo,
				    		this.autor,
				    		this.tema,
							this.referencia,
							this.url,
							this.arquivo
						];
					
					formX.buttons[0]._handler = formX.buttons[0].handler;
					formX.buttons[0].handler = function()
						{
							row.ctrlFields([row.observacao], true);
							formX.buttons[0]._handler();
						};
				}
				
				formX.render();
			},
		ctrlFields: function(fields, option)
			{
				for(var i=0;i<fields.length;i++)
				{
					fields[i].setDisabled(option);
				}
			}
	};